package com.gitee.hermer.boot.jee.commons.number;

import com.gitee.hermer.boot.jee.commons.utils.StringUtils;

public class IntegerUtils {
	/**
	 * 如果为0,则返回默认值
	 * 
	 * @param originalInt
	 * @param defaultInt 默认Integer
	 * @return
	 */
	public static Integer defaultIfZero(Integer originalInt, Integer defaultInt) {
		if (0 == originalInt) {
			return defaultInt;
		}
		return originalInt;
	}

	/**
	 * 如果为0,则返回默认值
	 * 
	 * @param originalInt
	 * @param defaultInt 默认Integer
	 * @return
	 */
	public static Integer defaultIfError(String originalStr, Integer defaultInt) {

		try {
			return Integer.parseInt(StringUtils.trimToEmpty(originalStr));
		} catch (Exception e) {
			return defaultInt;
		}
	}

	/**
	 * 如果是一个不合法的整型，那么返回一个默认值
	 * 
	 * @param originalInt
	 * @param defaultInt 默认Integer
	 * @return
	 */
	public static Integer defaultIfError(Integer originalStr, Integer defaultInt) {

		try {
			return Integer.valueOf(originalStr);
		} catch (Exception e) {
			return defaultInt;
		}
	}

	/**
	 * 如果非正,则返回默认值<br>
	 * @param originalInt
	 * @param defaultInt 默认Integer
	 * @return originalInt if originalInt>0, return defaultInt if originalInt<=0
	 */
	public static Integer defaultIfSmallerThan0(Integer originalInt, Integer defaultInt) {
		if (!isBiggerThan0(originalInt)) {
			return defaultInt;
		}
		return originalInt;
	}

	/** 将String 转化成 Integer，如果小于等于0，将抛异常 */
	public static Integer exceptionIfSmallerThan0(String originalStr) throws Exception {
		try {
			int num = Integer.parseInt(StringUtils.trimToEmpty(originalStr));
			if (num > 0)
				return num;
			else
				throw new Exception();
		} catch (Exception e) {
			throw new Exception(originalStr + " is smaller than 0, or it is a  invalid parameter ");
		}
	}
	
	/**
	 * 判断是否大余0
	 * @return false if num <=0 , true if num >0
	 */
	public static boolean isBiggerThan0(Integer num) {
		return num != null && isBiggerThan0(num.intValue());
	}

	/**
	 * 判断是否大余0
	 * @return false if num <=0 , true if num >0
	 */
	public static boolean isBiggerThan0(int num) {
		if (0 >= num)
			return false;
		return true;
	}

	/**
	 * Return maxInt if too big, else return original.
	 * @param originalInt
	 * @param maxInt max int
	 * @return
	 */
	public static Integer maxIfTooBig(Integer originalInt, Integer maxInt) {
		if (originalInt >= maxInt) {
			originalInt = maxInt;
		}
		return originalInt;
	}

}
